package com.ruoyi.newSystem.mapper;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ruoyi.common.core.domain.permission.vo.menu.MenuListReqVO;
import com.ruoyi.common.utils.BaseMapperX;
import com.ruoyi.common.utils.LambdaQueryWrapperX;
import com.ruoyi.common.core.domain.entity.MenuDO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * The interface Menu mapper.
 */
@Mapper
public interface MenuMapper extends BaseMapperX<MenuDO> {

    /**
     * Select by parent id and name menu do.
     *
     * @param parentId the parent id
     * @param name     the name
     * @return the menu do
     */
    default MenuDO selectByParentIdAndName(Long parentId, String name) {
        return selectOne(MenuDO::getParentId, parentId, MenuDO::getName, name);
    }

    /**
     * Select count by parent id long.
     *
     * @param parentId the parent id
     * @return the long
     */
    default Long selectCountByParentId(Long parentId) {
        return selectCount(MenuDO::getParentId, parentId);
    }

    /**
     * Select list list.
     *
     * @param reqVO the req vo
     * @return the list
     */
    default List<MenuDO> selectList(MenuListReqVO reqVO) {
        return selectList(new LambdaQueryWrapperX<MenuDO>()
                .likeIfPresent(MenuDO::getName, reqVO.getName())
                .eqIfPresent(MenuDO::getStatus, reqVO.getStatus())
                .eqIfPresent(MenuDO::getType, reqVO.getType()));
    }

    /**
     * Select list by permission list.
     *
     * @param permission the permission
     * @return the list
     */
    default List<MenuDO> selectListByPermission(String permission) {
        return selectList(MenuDO::getPermission, permission);
    }

    default List<MenuDO> selectListByCategoryId(String categoryId) {
        QueryWrapper<MenuDO> menuDOQueryWrapper = new QueryWrapper<>();
        menuDOQueryWrapper.eq("category_id", categoryId);
        menuDOQueryWrapper.or();
        menuDOQueryWrapper.eq("id", categoryId);
        menuDOQueryWrapper.eq("deleted", 0);
        return selectList(menuDOQueryWrapper);
    }


    List<MenuDO> getMenusByUserId(Long userId);
}
